import request from '@/utils/request';
import type { BaseBeanModel, ResponsePageData, ResponseBaseData, QueryParamModel } from '@/api/model/baseModel';
const basePath = '/appsys/sysjob/SysJobRest';
/** 定时任务任务定义表，用于定义一个定时任务的信息，包括名称、组、运行的程序、运行时机等。 */
export interface SysJobDto extends BaseBeanModel {
  /** 此Job的名称，要求具有描述性，如“月度销售统计任务” */
  name?: string;
  /** 为了便于管理，将每个Job分组管理，要求具有描述性，如“报表组”。如果未指定，则框架提供一个默认的Group名称。 */
  group?: string;
  /** 此Job执行时调用的程序。由一个资源表达式定义，如spring:myBean#myFunction。 */
  program?: string;
  /** 一个Cron表达式，用于定义Job的运行时机。如0 0 30 * * ? */
  cron?: string;
  /** 定时任务的当前状态，可能值为“启动中”、“暂停中”、“已暂停”、“运行中” */
  status?: string;
  /** 对此Job的描述。如“月度审计任务，将在每个月的第一天凌晨1点开始，审计上个月的销售情况，由XXX负责” */
  description?: string;
  /** 此条记录的创建人 */
  createUser?: string;
  /** 此条记录的创建时间 */
  createDate?: any;
  createDateBegin?: any;
  createDateEnd?: any;
  /** 此条记录的更新人 */
  updateUser?: string;
  /** 此条记录的更新日期 */
  updateDate?: any;
  updateDateBegin?: any;
  updateDateEnd?: any;
  /** 任务类型 */
  type?: string;
  /** 最后一次执行的完成状态(S:成功，F:失败) */
  lastState?: string;
  /** 公司系统编号 */
  companyId?: string;
  /** 所属应用系统ID */
  sysApplicationId?: string;
}

/**
 * 获取分页数据
 * @param param 查询参数
 * @returns 表格分页数据
 */
export function listSysJobByPage(param: QueryParamModel): Promise<ResponsePageData<SysJobDto>> {
  return request.post(`${basePath}/searchByPage/v1`, param);
}

/**
 * 根据id加载数据
 * @param id 数据id
 * @returns 根据数据id获取到的数据
 */
export function getSysJob(id: string): Promise<ResponseBaseData<SysJobDto>> {
  return request.get(`${basePath}/get/v1/${id}`);
}

/**
 * 保存表单数据
 * @param param 表单数据
 * @returns 保存结果
 */
export function saveSysJob(param: {
  dto1: SysJobDto;
  dto2: [{ jobCalendarId: string }];
  dto3: [{ name: string; dataType: string; value: string }];
}): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/save/v1`, param);
}

/**
 * 更新表单数据
 * @param param 表单数据
 * @returns 更新结果
 */
export function updateSysJob(param: {
  dto1: SysJobDto;
  dto2: [{ jobCalendarId: string }];
  dto3: [{ name: string; dataType: string; value: string }];
}): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/updateSensitive/v1`, param);
}

/**
 * 根据id集合删除数据
 * @param ids 数据id集合
 * @returns 删除结果
 */
export function delSysJob(ids: [string]): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/deleteSysJobByIds/v1`, ids);
}

/**
 * 开始任务
 * @param id 数据id
 * @returns 执行结果
 */
export function scheduleSysJob(id: string): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/scheduleJob/v1`, { id });
}

/**
 * 停止任务
 * @param id 数据id
 * @returns 执行结果
 */
export function unScheduleSysJob(id: string): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/unScheduleJob/v1`, { id });
}

/**
 * 立即执行任务
 * @param id 数据id
 * @returns 执行结果
 */
export function executeSysJob(id: string): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/execute/v1`, { id });
}

/**
 * 获取历史数据
 * @param param 查询参数
 * @returns 历史数据列表
 */
export function listSysJobHistoryByPage(param: QueryParamModel): Promise<ResponsePageData<SysJobDto>> {
  return request.post('/appsys/showhistory/sysjobhistory/SysJobHistoryRest/searchByPage/v1', param);
}

/**
 * 根据id集合删除历史数据
 * @param ids 数据id集合
 * @returns 删除结果
 */
export function delSysJobHistory(ids: [string]): Promise<ResponseBaseData<any>> {
  return request.post('/appsys/showhistory/sysjobhistory/SysJobHistoryRest/deleteSysJobHistoryByIds/v1', ids);
}

/**
 * 获取任务分组
 * @returns 任务分组列表
 */
export function getSysJobGroup(): Promise<ResponseBaseData<any>> {
  return request.get(`${basePath}/getGroups/v1`);
}

/**
 * 批量开始任务
 * @param id 数据id
 * @returns 执行结果
 */
export function scheduleSysGroupJob(id: string): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/scheduleJobByGroup/v1`, id);
}

/**
 * 批量停止任务
 * @param id 数据id
 * @returns 执行结果
 */
export function unScheduleSysGroupJob(id: string): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/unScheduleJobByGroup/v1`, id);
}

/**
 * 批量执行任务
 * @param id 数据id
 * @returns 执行结果
 */
export function executeSysGroupJob(id: string): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/executeByGroup/v1`, id);
}

/**
 * 获取参数列表
 * @param param 查询参数
 * @returns 参数列表
 */
export function searchSysJobVariablesByPage(param: { dto1: QueryParamModel }): Promise<ResponseBaseData<any>> {
  return request.post('/appsys/jobquar/sysjobvariables/SysJobVariablesRest/searchSysJobVariablesByPage/v1', param);
}
